




//https://blog.csdn.net/yang1fei2/article/details/124650902


//1.设置上下文属性(setContextProperty())

//2.在QML引擎里面注册新类型(qmlRegisterType)

//3.导出对应的QML扩展插件。

//下面介绍一下三个方法的优缺点:

//对于小型应用来说，方法一设置上下文属性是最简单实用的方法。开发者只需要将对应的接口和变量暴露给QML就行。由于设置在QML中的变量是全局的，一定要注意避免名称冲突。

//在QML引擎里面注册新的类型，允许用户在QML文件中控制C++对象的生命周期，这是设置上下文属性这种方法无法实现的。同时注册新类型的方法，不会污染全局命名空间。但是这种方法也有一个缺点，就是QML中的类型都需要提前注册，所有用到的库都需要在程序启动的时候链接，无法动态链接。但在绝大多数情况下，这并不是一个问题。

//QML扩展插件是弹性最好，但也是最复杂的方法。QML允许用户在插件里面注册对应的新类型。这些新类型在QML第一次导入对应的符号的时候被加载。同时，通过使用QML单例引入，我们的新类型不会污染全局命名空间。由于新类型被插件化了，我们可以很轻松的在多个项目中复用我们之前定义的新类型。



//#include <QGuiApplication>
//#include <QQmlApplicationEngine>

//int main(int argc, char *argv[])
//{
//    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

//    QGuiApplication app(argc, argv);

//    QQmlApplicationEngine engine;
//    const QUrl url(QStringLiteral("qrc:/main.qml"));
//    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
//                     &app, [url](QObject *obj, const QUrl &objUrl) {
//        if (!obj && url == objUrl)
//            QCoreApplication::exit(-1);
//    }, Qt::QueuedConnection);
//    engine.load(url);

//    return app.exec();
//}


#include <QGuiApplication>
#include <QQmlApplicationEngine>

#include "backend.h"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    //      The BackEnd class is registered as a type, which is accessible from QML by importing the URL, "io.qt.examples.backend 1.0".
    //在engine声明之前注册C++类型
    //@1:类在qml中别名 @2:版本主版本号 @3:版本的次版本号 @4类的名称
    qmlRegisterType<BackEnd>("io.qt.examples.backend", 1, 0, "BackEnd"); // 通过注册类型的方式，

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}


//#include <QGuiApplication>
//#include <QQmlApplicationEngine>
//#include <QQuickView>
//#include <QQmlContext>

//#include "backend.h"

//int main(int argc, char *argv[])
//{
//    QGuiApplication app(argc, argv);

//    BackEnd backend;
//    QQuickView view;
//    //在加载对应的URL之前, 设置上下文属性
//    view.engine()->rootContext()->setContextProperty("backend", &backend);
//    view.setSource(QUrl::fromLocalFile("qrc:/main.qml"));
//    view.show();
//    return app.exec();
//}
